/*
* 在JavaScript中，函数是重要的组成部分，并且函数可以作为一等公民，在使用函数的时候，函数也会有自己的类型
*       函数类型表达式： 格式：(参数列表)=>函数的返回值  (arg: number) => number
*
* typescript对于传入的函数类型的参数个数不进行检测
*        const names: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
*        names.forEach((item: number, index: number, array: number[]) => {
*            console.log(item)
*       })
*
* foo本身也是一个标识符，也应该有自己的类型
*       const bar: (arg: number) => number = (arg: number): number => {
*           return arg
*       }
* */

/*
    function foo(arg: number): number {
        return arg
    }
*/

/* type BarType = (arg: number) => number
    const bar: BarType = (arg: number): number => {
        return arg
    }*/


/*type CallBackType = (num1: number, num2: number) => void
    function delayExecFun(callback: CallBackType):void {
        callback(10, 20)
    }

    delayExecFun((num1: number, num2: number): void => {
        console.log(num1, num2)
    })*/


/*
使用type定义一个CallBack类型别名为一个函数 接收两个number类型的参数num1，num2，返回值为number类型
type CallBackType = (num1: number, num2: number) => number

定义一个fun的function，实参callback的类型是CallBackTYpe类型别名
function fun(callback: CallBackType): number {
    // 调用外部传递过来的callback回调函数将其返回出去
    return callback(10, 20)
}

调用fun的function传入一个回调函数，回调函数的形参num1和num2为number类型该匿名函数返回一个number类型
const result: number = fun((num1: number, num2: number): number => {
    return num1 + num2
})
console.log(result)*/

/*typescript对于传入的函数类型的参数个数不进行检测
const names: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
names.forEach((item: number, index: number, array: number[]) => {
    console.log(item)
})*/



